Analiza danych strukturalnych dotyczącyh sektora bankowego¶
Cel¶
Analiza danych strukturalnych sektora bankowego w ujęciu rocznym. W szczególności analiza liczby banków, oddziałów oraz zatrudnienia.
Założenia¶
W trakcie analizy nie uzwględniono roku 2009, ponieważ dane z tego roku dotyczą tylko grudnia 2009. Naszym celem jest analiza roczna, więc przyjmujemy ze jeden miesiąc nie daje nam dostatecznej informacji i odrzucmay te dane. Dodatkowo na wykresach "rok do roku" nie ujęto roku 2010, ponieważ jest on punktem odniesienia, do którego porównujemy rok 2011.
Kontekst¶
Na przedstawionych wykresach często pojawiają sie zmiany w oklicy roku 2013 oraz 2019. Należy wziąć pod uwagę fakt, że w 2013 roku nastąpiła zmiana w ustawie o funkcjonowaniu banków, w tym zmiany związane z nadzorem nad bankami komercyjnymi oraz spółdzielczymi (bardziej rygorystyczne przepisy). Natomiast w 2019 roku pandemia COVID-19 wpłynęła na gospodarkę, w tym ograniczone możliwości podróży, zwolnienia, niepokój o zdrowie i życie, co spowodowało zmiany także w sektorze bankowym.
import plotly.io as pio
pio.renderers.default = "notebook"
import pandas as pd
import numpy as np
import plotly.graph_objects as go
from plotly.subplots import make_subplots
import plotly.express as px
import plotly.offline as pyo
Anliza liczby banków¶
banki_dane_2009_2017 = pd.read_excel("C:/Users/katar/OneDrive/Pulpit/3.Bank/dane_2009_2017.xlsx", sheet_name = "Liczba_banków", engine = "openpyxl", header = 0)
banki_dane_2018_2024 = pd.read_excel("C:/Users/katar/OneDrive/Pulpit/3.Bank/dane_2018_2024.xlsx", sheet_name = "Liczba_banków", engine ="openpyxl", header = 0)
banki_dane_2009_2017.head()
| Liczba krajowych banków komercyjnych | Liczba banków spółdzielczych | Liczba oddziałów instytucji kredytowych | Data | |
|---|---|---|---|---|
| 0 | 49 | 576 | 18 | 2009-12-31 |
| 1 | 48 | 576 | 19 | 2010-01-31 |
| 2 | 48 | 576 | 20 | 2010-02-28 |
| 3 | 49 | 576 | 20 | 2010-03-31 |
| 4 | 49 | 576 | 20 | 2010-04-30 |
banki_dane_2018_2024.head()
| Sektor bankowy | Banki komercyjne | Oddziały | Banki spółdzielcze | Data | |
|---|---|---|---|---|---|
| 0 | 616 | 35 | 29 | 552 | 2018-01-31 |
| 1 | 616 | 35 | 29 | 552 | 2018-02-28 |
| 2 | 616 | 35 | 29 | 552 | 2018-03-31 |
| 3 | 615 | 35 | 29 | 551 | 2018-04-30 |
| 4 | 615 | 35 | 29 | 551 | 2018-05-31 |
banki_dane_2009_2017.columns = ["Banki komercyjne", "Banki spółdzielcze", "Oddziały", "Data"]
banki_dane_2009_2017["Sektor bankowy"] = banki_dane_2009_2017[["Banki komercyjne", "Oddziały", "Banki spółdzielcze"]].sum(axis=1)
# banki_dane_2009_2017.dtypes
banki_dane_2018_2024.columns = ["Sektor bankowy" , "Banki komercyjne", "Oddziały", "Banki spółdzielcze", "Data"]
# banki_dane_2018_2024.dtypes
df_banki = pd.concat([banki_dane_2009_2017,banki_dane_2018_2024])
df_banki["Rok"] = df_banki["Data"].dt.year
df_banki = df_banki[["Banki komercyjne", "Oddziały", "Banki spółdzielcze", "Sektor bankowy", "Rok"]].groupby("Rok").sum().reset_index()
df_banki = df_banki.drop(index=0)
df_banki = df_banki.reset_index(drop=True)
df_banki.head()
| Rok | Banki komercyjne | Oddziały | Banki spółdzielcze | Sektor bankowy | |
|---|---|---|---|---|---|
| 0 | 2010 | 586 | 246 | 6912 | 7744 |
| 1 | 2011 | 576 | 256 | 6897 | 7729 |
| 2 | 2012 | 556 | 272 | 6875 | 7703 |
| 3 | 2013 | 508 | 328 | 6863 | 7699 |
| 4 | 2014 | 470 | 336 | 6807 | 7613 |
Wykres 1 "Liczba banków i oddziałów instytucji kredytowych w latach 2010-2024"¶
fig = go.Figure()
fig.add_trace(go.Scatter(x=df_banki["Rok"], y=df_banki["Banki komercyjne"],
mode='lines+markers', name='Banki komercyjne'))
fig.add_trace(go.Scatter(x=df_banki["Rok"], y=df_banki["Banki spółdzielcze"],
mode='lines+markers', name='Banki spółdzielcze'))
fig.add_trace(go.Scatter(x=df_banki["Rok"], y=df_banki["Oddziały"],
mode='lines+markers', name='Oddziały instytucji kredytowych'))
fig.add_trace(go.Scatter(x=df_banki["Rok"], y=df_banki["Sektor bankowy"],
mode='lines+markers', name='Sektor bankowy'))
fig.update_layout(
title="Liczba banków i oddziałów w sektorze bankowym",
xaxis_title="Rok",
yaxis_title="Liczba jednostek",
legend_title="Kategoria",
template="plotly_white"
)
fig.show()
Wyniki:
Zauważyć można podobieństwo w wykresach liczebności banków spółdzielczych oraz sekotra bankowego ogólnie. Ponadto widoczna jest ogólna, wyraźna tendencja spadkowa na przestrzeni ostatniej dekady. Tylko wsród oddziałów instytucji kredytowych widać tendencję wzrostową. W okolicach roku 2019 liczba tych oddziałów jest większa niż banków komercyjncyh i trend ten utrzymuje się.
Wykres 2 "Zmiany procentowe liczby banków i oddziałów instytucji kredytowych na przestrzeni lat 2010-2024 rok do roku"¶
# roczne zmiany procentowe
df_dynamika = df_banki.copy()
for col in df_banki.columns[1:]:
df_dynamika[col] = df_banki[col].pct_change() * 100
df_dynamika = df_dynamika.iloc[1:].reset_index(drop=True)
# print(df_dynamika)
correlation_matrix = df_banki.corr()
# print(correlation_matrix)
fig = make_subplots(rows=2, cols=2, subplot_titles=[
"Banki komercyjne",
"Banki spółdzielcze",
"Oddziały instytucji kredytowych",
"Sektor bankowy (ogólnie)"
])
categories = [
("Banki komercyjne", 1, 1),
("Banki spółdzielcze", 1, 2),
("Oddziały", 2, 1),
("Sektor bankowy", 2, 2),
]
for col_name, row, col in categories:
fig.add_trace(go.Bar(x=df_dynamika["Rok"], y=df_dynamika[col_name], name=col_name),
row=row, col=col)
fig.update_layout(
title="Dynamika zmian liczby banków i oddziałów (%) rok do roku",
showlegend=False,
template="plotly_white",
height=600,
)
fig.show()
Wyniki:
Banki komercyjne - widoczny wyraźny spadek około roku 2013, następnie zmiany pomału stabilizują się, by w 2019 roku odnotować kolejny spadek. Banki spółdzielcze - wyraźny spadek utrzymujący się od roku 2019 do 2022. Oddziały instytucji kredytowych - wysoki wzrost procentowy w 2013 roku. W roku 2016 spadek oraz lekki spadek w latach 2022-2024.
Zauważyć można, że w roku 2013 wraz ze wzrostem liczby oddziałów instytucji krdedytowych spada liczba banków komercyjnych. Możliwa jest relacja między tymi czynnikami (do dalszej analizy). Możliwe, że ma to związek z procesm konsolidacji (fuzje, przejęcia banków komercyjnych).
Analiza liczby oddziałów¶
oddzialy_dane_2009_2017 = pd.read_excel("C:/Users/katar/OneDrive/Pulpit/3.Bank/dane_2009_2017.xlsx", sheet_name = "Liczba_oddziałów", engine = "openpyxl", header = 0)
oddzialy_dane_2018_2024 = pd.read_excel("C:/Users/katar/OneDrive/Pulpit/3.Bank/dane_2018_2024.xlsx", sheet_name = "Liczba_oddziałów", engine ="openpyxl", header = 0)
oddzialy_dane_2009_2017.head()
oddzialy_dane_2009_2017.columns = ["Liczba oddziałów", "W kraju", "Za granicą", "Data"]
oddzialy_dane_2018_2024.head()
# print(oddzialy_dane_2018_2024.columns)
oddzialy_dane_2018_2024.columns = ["Liczba oddziałów", "W kraju", "Za granicą", "Data"]
# oddzialy_dane_2009_2017.dtypes
# oddzialy_dane_2018_2024.dtypes
df_oddzialy = pd.concat([oddzialy_dane_2009_2017, oddzialy_dane_2018_2024])
df_oddzialy["Rok"] = df_oddzialy["Data"].dt.year
#df_oddzialy.head()
df_oddzialy = df_oddzialy[["Liczba oddziałów", "W kraju", "Za granicą", "Rok"]].groupby("Rok").sum().reset_index()
#df_oddzialy.head()
df_oddzialy = df_oddzialy.drop(index=0)
df_oddzialy = df_oddzialy.reset_index(drop=True)
df_oddzialy.head()
| Rok | Liczba oddziałów | W kraju | Za granicą | |
|---|---|---|---|---|
| 0 | 2010 | 82872 | 82631 | 241 |
| 1 | 2011 | 84678 | 84626 | 52 |
| 2 | 2012 | 86477 | 86421 | 56 |
| 3 | 2013 | 88754 | 88706 | 48 |
| 4 | 2014 | 87735 | 87686 | 49 |
Wykres 1 "Liczba oddziałów bankowych w kraju i za granicą w latach 2010-2024"¶
fig = go.Figure()
fig.add_trace(go.Scatter(x=df_oddzialy["Rok"], y=df_oddzialy["Liczba oddziałów"],
mode='lines+markers', name='Liczba oddziałów ogólnie'))
fig.add_trace(go.Scatter(x=df_oddzialy["Rok"], y=df_oddzialy["W kraju"],
mode='lines+markers', name='Liczba oddziałów w kraju'))
fig.add_trace(go.Scatter(x=df_oddzialy["Rok"], y=df_oddzialy["Za granicą"],
mode='lines+markers', name='Liczba oddziałów za granicą'))
fig.update_layout(
title="Liczba oddziałów w kraju i za granicą (2010-2024)",
xaxis_title="Rok",
yaxis_title="Liczba oddziałów",
legend_title="Kategoria",
template="plotly_white"
)
fig.show()
Wyniki:
Liczba oddziałów zależy głównie od liczby oddziałów bankowych w kraju, co jest raczej oczekiwanym rezultatem. Jeśli chodzi natomiast o liczbę oddziałów za granicą to widać znaczy spadek pomiędzy rokiem 2010 i 2011, nastepnie utrzyjmuje się podobna, lekko wzrostowa tendencja.
Wykres 2 "Zmiany procentowe liczby oddziałów w kraju i za granicą na przestrzeni lat 2010-2024 rok do roku"¶
df_dynamika = df_oddzialy.copy()
for col in df_oddzialy.columns[1:]:
df_dynamika[col] = df_oddzialy[col].pct_change() * 100
df_dynamika = df_dynamika.iloc[1:].reset_index(drop=True)
#print(df_dynamika)
fig = make_subplots(rows=1, cols=3, subplot_titles=[
"Liczba oddziałów",
"W kraju",
"Za granicą",
])
categories = [
("Liczba oddziałów", 1, 1),
("W kraju", 1, 2),
("Za granicą", 1, 3)
]
for col_name, row, col in categories:
fig.add_trace(go.Bar(x=df_dynamika["Rok"], y=df_dynamika[col_name], name=col_name),
row=row, col=col)
fig.update_layout(
title="Dynamika zmian liczby oddziałów w kraju i za granicą rok do roku",
showlegend=False,
template="plotly_white",
height=600,
)
fig.show()
Wyniki:
Zauważyć można spadek liczby oddziałow po 2013 roku oraz jeszcze większy spadek po roku 2017, któy utrzymywał sie aż do 2022 roku. W 2023 i 2024 roku spadek dalej jest widoczny, ale jest wyraźnie mniejszy. Podobnie sytuacja wygląda jesli chodzi o wykres liczby oddziałów w kraju w ujęciu procentowym rok do roku. Natomiast za granicą w 2011 roku widać ogromny spadek (blisko 80% w porównanu do roku 2010), jednak w 2014 zaczyna się tendencja wzrostowa, która w 2017 roku sięga ponad 20%. W kolejnych latach widzimy naprzemienne spadki i wzrosty.
Analiza zatrudnienia¶
zatrudnienie_dane_2009_2017 = pd.read_excel("C:/Users/katar/OneDrive/Pulpit/3.Bank/dane_2009_2017.xlsx", sheet_name = "Zatrudnienie", engine = "openpyxl", header = 0)
zatrudnienie_dane_2018_2024 = pd.read_excel("C:/Users/katar/OneDrive/Pulpit/3.Bank/dane_2018_2024.xlsx", sheet_name = "Zatrudnienie", engine ="openpyxl", header = 0)
zatrudnienie_dane_2009_2017.head()
zatrudnienie_dane_2009_2017.dtypes
zatrudnienie_dane_2009_2017.columns
zatrudnienie_dane_2009_2017.columns = ["Liczba zatrudnionych", "W centrali", "W kraju", "Za granicą", "Data"]
zatrudnienie_dane_2018_2024.head()
zatrudnienie_dane_2018_2024.dtypes
zatrudnienie_dane_2018_2024.columns
zatrudnienie_dane_2018_2024.columns = ["Liczba zatrudnionych", "W centrali", "W kraju", "Za granicą", "Data"]
df_zatrudnienie = pd.concat([zatrudnienie_dane_2009_2017, zatrudnienie_dane_2018_2024])
df_zatrudnienie.head()
| Liczba zatrudnionych | W centrali | W kraju | Za granicą | Data | |
|---|---|---|---|---|---|
| 0 | 175249 | 68105 | 107009 | 135 | 2009-12-31 |
| 1 | 173966 | 67757 | 106080 | 129 | 2010-01-31 |
| 2 | 174258 | 68284 | 105841 | 133 | 2010-02-28 |
| 3 | 175497 | 68872 | 106493 | 132 | 2010-03-31 |
| 4 | 176705 | 69559 | 107012 | 134 | 2010-04-30 |
df_zatrudnienie["Rok"] = df_zatrudnienie["Data"].dt.year
df_zatrudnienie = df_zatrudnienie[["Liczba zatrudnionych", "W centrali", "W kraju", "Za granicą", "Rok"]].groupby("Rok").sum().reset_index()
# df_zatrudnienie.head()
df_zatrudnienie = df_zatrudnienie.drop(index=0)
df_zatrudnienie = df_zatrudnienie.reset_index(drop=True)
df_zatrudnienie.head()
| Rok | Liczba zatrudnionych | W centrali | W kraju | Za granicą | |
|---|---|---|---|---|---|
| 0 | 2010 | 2115616 | 837114 | 1276946 | 1556 |
| 1 | 2011 | 2129719 | 858884 | 1269146 | 1689 |
| 2 | 2012 | 2111444 | 868106 | 1241562 | 1776 |
| 3 | 2013 | 2091077 | 869009 | 1219422 | 2646 |
| 4 | 2014 | 2076505 | 867569 | 1206233 | 2703 |
Wykres 1 "Liczba osób zatrudnionych w banku w centrali, za granicą i w kraju w latach 2010-2024"¶
fig = go.Figure()
fig.add_trace(go.Scatter(x=df_zatrudnienie["Rok"], y=df_zatrudnienie["Liczba zatrudnionych"],
mode='lines+markers', name='Liczba zatrudnionych'))
fig.add_trace(go.Scatter(x=df_zatrudnienie["Rok"], y=df_zatrudnienie["W kraju"],
mode='lines+markers', name='W kraju'))
fig.add_trace(go.Scatter(x=df_zatrudnienie["Rok"], y=df_zatrudnienie["Za granicą"],
mode='lines+markers', name='Za granicą'))
fig.add_trace(go.Scatter(x=df_zatrudnienie["Rok"], y=df_zatrudnienie["W centrali"],
mode='lines+markers', name='W centrali'))
fig.update_layout(
title="Liczba osób zatrudnionych w sektorze bankowym",
xaxis_title="Rok",
yaxis_title="Liczba pracowników",
legend_title="Kategoria",
template="plotly_white"
)
fig.show()
Wyniki:
Wykres osób zatrudnionych w kraju ma podobny przebieg co wykres osób zatrudnionych ogólnie, co jest zgodne z oczekiwaniami. W 2019 roku następuje widoczna zmiana trendu, wyraźnie zmniejszyła się liczb osób zatrudnionych, ogólnie jak i w kraju. Co ciekawe liczba pracowników zatrudnionych w centrali w latach 2019-2021 utrzymuje się na podobnym poziomie. Z kolei liczba pracowników za granicą sysytematycznie wzrasta, aż do 2020 roku, po czym nieznacznie maleje. Wykres liczby zatrudnionych w sektorze bankowym ogólnie spada aż do 2022, a następnie powoli wzrasta.
Wykres 2 "Zmiany procentowe liczby osób zatrudnionych w banku w centrali, za granicą i w kraju rok do roku"¶
df_dynamika = df_zatrudnienie.copy()
for col in df_zatrudnienie.columns[1:]:
df_dynamika[col] = df_zatrudnienie[col].pct_change() * 100
df_dynamika = df_dynamika.iloc[1:].reset_index(drop=True)
#print(df_dynamika)
fig = make_subplots(rows=2, cols=2, subplot_titles=[
"Liczba zatrudnionych",
"W centrali",
"W kraju",
"Za granicą",
])
categories = [
("Liczba zatrudnionych", 1, 1),
("W centrali", 1, 2),
("W kraju", 2, 1),
("Za granicą", 2, 2)
]
for col_name, row, col in categories:
fig.add_trace(go.Bar(x=df_dynamika["Rok"], y=df_dynamika[col_name], name=col_name),
row=row, col=col)
fig.update_layout(
title="Dynamika zmian liczby zatrudninych w kraju i za granicą (%) rok do roku",
showlegend=False,
template="plotly_white",
height=600,
)
fig.show()
Wyniki:
Widoczna tendencja spadkowa osób zatrudnionych w bankach, w kraju. W 2013 roku widać, wzrost o ponad 40% w porónainu do roku 2012 liczby pracowników za granicą. Następnie dalej utrzymuje się tendencja wzrostowa, chociaż aż do 2020 roku. W centrali tylko w 2020 roku zatrudnono mniej osób w porówniu do roku wcześniejszego.